/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases;

import controladores.ConvenioXPeriodoFacadeLocal;
import controladores.ConvenioXPeriodoXEstudianteFacadeLocal;
import controladores.CoordinadorPracticasFacadeLocal;
import controladores.SupervisorXEntidadFacadeLocal;
import entidades.Area;
import entidades.Convenio;
import entidades.ConvenioXPeriodo;
import entidades.ConvenioXPeriodoXEstudiante;
import entidades.ConvenioXPeriodoXEstudiantePK;
import entidades.Entidad;
import entidades.Estudiante;
import entidades.Periodo;
import entidades.Sitio;
import entidades.Supervisor;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import negocio.AreaInterface;
import negocio.ConvenioInterface;
import negocio.ConvenioXPeriodoInterface;
import negocio.EntidadInterface;
import negocio.EstudianteInterface;
import negocio.PeriodoInterface;
import negocio.SitioInterface;
import negocio.SupervisorEntidadInterface;
import negocio.SupervisorInterface;

/**
 *
 * @author BATAQUERO
 */
@ManagedBean
@ViewScoped
public class AsignarConvenioEstudianteBean {
    //Estudiante
    Estudiante estudiante = new Estudiante();
    Periodo periodo = new Periodo();
    ConvenioXPeriodo convenioXPeriodo = new ConvenioXPeriodo();
    //Estudiante
    private EstudianteInterface estudianteInterface;
    private List<Estudiante> listaEstudiantes;
    private String estudianteSelected;
    //Areas
    private AreaInterface areaInterface;
    private List<Area> listaAreas;
    private String areaSelected;
    //Periodo
    private PeriodoInterface periodoInterface;
    private List<Periodo> listaPeriodos;
    private String periodoSelected;
    //Supervisor
    private SupervisorInterface supervisorInterface;
    private List<Supervisor> listaSupervisores;
    private String supervisorSelected;
    //Entidades
    @EJB
    private EntidadInterface entidadInterface;
    private List<Entidad> listaEntidades;
    private Entidad entidadSelected;
    // SupervisorEntidad
    @EJB
    private SupervisorXEntidadFacadeLocal supervisorXEntidadFacadeLocal;
    private SupervisorEntidadInterface supervisorEntidadInterface;     
    //private List<SupervisorEntidad> listaSupervisorEntidad;
    private String supervisorEntidadSelected;
    @EJB
    private SitioInterface sitioInterface;
    private List<Sitio> listaSitios;
    private String sitioSelected;
    
    @EJB
    private ConvenioInterface convenioInterface;
    private List<Convenio> listaConvenios;
    private String convenioSelected;
    
    @EJB
    private ConvenioXPeriodoInterface convenioXPeriodoInterface;
    
    private boolean VISIBLE_ENTIDAD = true;
    private boolean ASIGNADO_ESTUDIANTE = false;
    private boolean ESTADO_ESTUDIANTE = true;
    
    @EJB
    private ConvenioXPeriodoXEstudianteFacadeLocal convenioXPeriodoXEstudianteFacadeLocal;
    @EJB
    private ConvenioXPeriodoFacadeLocal convenioXPeriodoFacadeLocal;
    @EJB
    private CoordinadorPracticasFacadeLocal coordinadorPracticasFacadeLocal; 
    @ManagedProperty(value = "#{sessionBean}")
    private SessionBean sessionBean;
    
    public AsignarConvenioEstudianteBean(){
    }
    
    @PostConstruct
    public void InicializarVariables() {
         try {
             /***************************/
            /*Se debe quitar el refresh*/
            /***************************/
            InitialContext ctx = new InitialContext();
            estudianteInterface = (EstudianteInterface) ctx.lookup("EstudianteEJB");
            //listaEstudiantes = estudianteInterface.listarEstudiantesActivosXProgramaSinConvenio(sessionBean.getUsuarioSession().getCoordinadorPracticas().getIdPrograma(), ASIGNADO_ESTUDIANTE, ESTADO_ESTUDIANTE);
            listaEstudiantes = estudianteInterface.listarEstudiantesActivosXFacultadSinConvenio(sessionBean.getUsuarioSession().getCoordinadorPracticas().getIdPrograma().getIdFacultad(), ASIGNADO_ESTUDIANTE, ESTADO_ESTUDIANTE);
            periodoInterface = (PeriodoInterface) ctx.lookup("PeriodoEJB");
            listaPeriodos = periodoInterface.listarPeriodos();
            areaInterface = (AreaInterface) ctx.lookup("AreaEJB");
            listaAreas = areaInterface.listaAreasXFacultad(sessionBean.getUsuarioSession().getCoordinadorPracticas().getIdPrograma().getIdFacultad());
            supervisorInterface = (SupervisorInterface) ctx.lookup("SupervisorEJB");
            listaSupervisores = supervisorInterface.listarSupervisores();
            entidadInterface = (EntidadInterface) ctx.lookup("EntidadEJB");
            //entidadSelected = new Entidad();
            listaEntidades = entidadInterface.listarEntidadesVisibles(VISIBLE_ENTIDAD);

        } catch (NamingException ex) {
            Logger.getLogger(AsignarConvenioEstudianteBean.class.getName()).log(Level.SEVERE, null, ex);
        }
 
    }
    
    public void cargarConvenioXPeriodo(){
        System.out.println("------------entra al metodo ---cargarConvenioXPeriodo-------------");
        try{
            convenioXPeriodo.setIdArea(new Area(Integer.parseInt(areaSelected)));
            convenioXPeriodo.setIdConvenioPeriodo(convenioXPeriodoFacadeLocal.obtenerMaxId());
            convenioXPeriodo.setIdConvenio(new Convenio(Integer.parseInt(convenioSelected)));
            convenioXPeriodo.setIdSupervisor(new Supervisor(Integer.parseInt(supervisorSelected)));
            convenioXPeriodo.setIdSupervisorEntidad(new entidades.SupervisorEntidad(Integer.parseInt(supervisorEntidadSelected)));
            convenioXPeriodo.setIdPeriodo(new Periodo(Integer.parseInt(periodoSelected)));
            ConvenioXPeriodoXEstudiante convenioXPeriodoXEstudiante = new ConvenioXPeriodoXEstudiante();
            convenioXPeriodoXEstudiante.setConvenioXPeriodoXEstudiantePK(new ConvenioXPeriodoXEstudiantePK(convenioXPeriodo.getIdConvenioPeriodo(), Integer.parseInt(estudianteSelected)));
            convenioXPeriodoXEstudiante.setIdSitio(new Sitio(Integer.parseInt(sitioSelected)));
            convenioXPeriodoInterface.crearConvenioXPeriodo(convenioXPeriodo,convenioXPeriodoXEstudiante);
            FacesMessage facesMessage = new FacesMessage("Guardado con éxito");
            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
            limpiarCampos();
        } catch (Exception e) {
            FacesMessage facesMessage = new FacesMessage("Error");
            FacesContext.getCurrentInstance().addMessage(null, facesMessage);
            e.printStackTrace();
        }
    
    }
    
    private void limpiarCampos(){
        periodoSelected = "";
        areaSelected = "";
        entidadSelected = null;
        estudianteSelected = "";
        sitioSelected = "";
        convenioSelected = "";
        supervisorEntidadSelected = "";
        supervisorSelected = "";
        
    }
    
    public List<Estudiante> getListaEstudiantes() {
        return listaEstudiantes;
    }

    public void setListaEstudiantes(List<Estudiante> listaEstudiantes) {
        this.listaEstudiantes = listaEstudiantes;
    }

    public String getEstudianteSelected() {
        return estudianteSelected;
    }

    public void setEstudianteSelected(String estudianteSelected) {
        this.estudianteSelected = estudianteSelected;
    }

    public List<Area> getListaAreas() {
        return listaAreas;
    }

    public void setListaAreas(List<Area> listaAreas) {
        this.listaAreas = listaAreas;
    }

    public String getAreaSelected() {
        return areaSelected;
    }

    public void setAreaSelected(String areaSelected) {
        this.areaSelected = areaSelected;
    }

    public SessionBean getSessionBean() {
        return sessionBean;
    }

    public void setSessionBean(SessionBean sessionBean) {
        this.sessionBean = sessionBean;
    }

    public List<Periodo> getListaPeriodos() {
        return listaPeriodos;
    }

    public void setListaPeriodos(List<Periodo> listaPeriodos) {
        this.listaPeriodos = listaPeriodos;
    }

    public String getPeriodoSelected() {
        return periodoSelected;
    }

    public void setPeriodoSelected(String periodoSelected) {
        this.periodoSelected = periodoSelected;
    }

    public Periodo getPeriodo() {
        return periodo;
    }

    public void setPeriodo(Periodo periodo) {
        this.periodo = periodo;
    }

    public List<Supervisor> getListaSupervisores() {
        return listaSupervisores;
    }

    public void setListaSupervisores(List<Supervisor> listaSupervisores) {
        this.listaSupervisores = listaSupervisores;
    }

    public String getSupervisorSelected() {
        return supervisorSelected;
    }

    public void setSupervisorSelected(String supervisorSelected) {
        this.supervisorSelected = supervisorSelected;
    }

    public List<Entidad> getListaEntidades() {
        return listaEntidades;
    }

    public void setListaEntidades(List<Entidad> listaEntidades) {
        this.listaEntidades = listaEntidades;
    }

    public Entidad getEntidadSelected() {
        return entidadSelected;
    }

    public void setEntidadSelected(Entidad entidadSelected) {
        this.entidadSelected = entidadSelected;
    }

//    public List<SupervisorEntidad> getListaSupervisorEntidad() {
//        return listaSupervisorEntidad;
//    }
//
//    public void setListaSupervisorEntidad(List<SupervisorEntidad> listaSupervisorEntidad) {
//        this.listaSupervisorEntidad = listaSupervisorEntidad;
//    }
//
    public String getSupervisorEntidadSelected() {
        return supervisorEntidadSelected;
    }

    public void setSupervisorEntidadSelected(String supervisorEntidadSelected) {
        this.supervisorEntidadSelected = supervisorEntidadSelected;
    }
    

    public List<Sitio> getListaSitios() {
        return listaSitios;
    }

    public void setListaSitios(List<Sitio> listaSitios) {
        this.listaSitios = listaSitios;
    }

    public String getSitioSelected() {
        return sitioSelected;
    }

    public void setSitioSelected(String sitioSelected) {
        this.sitioSelected = sitioSelected;
    }

    public List<Convenio> getListaConvenios() {
        return listaConvenios;
    }

    public void setListaConvenios(List<Convenio> listaConvenios) {
        this.listaConvenios = listaConvenios;
    }

    public String getConvenioSelected() {
        return convenioSelected;
    }

    public void setConvenioSelected(String convenioSelected) {
        this.convenioSelected = convenioSelected;
    }
    
    
    
}
